/*
 * Copyright 2013-2016 Sergey Ignatov, Alexander Zolotov, Florin Patan
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* The following code was generated by JFlex 1.4.3 on 3/26/16 7:41 PM */

package com.plan9.intel.lang.core.lexer;

import com.intellij.lexer.FlexLexer;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.text.CharArrayUtil;

import java.io.IOException;
import java.io.Reader;

import static com.plan9.intel.ide.highlighting.AsmIntelLexerTokens.*;


/**
 * This class is a scanner generated by 
 * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
 * on 3/26/16 7:41 PM from the specification file
 * <tt>/Users/zolotov/dev/intellij-plugins/intellij-go/plan9/src/com/plan9/intel/ide/highlighting/AsmIntelHighlightingLexer.flex</tt>
 */
public class _AsmIntelHighlightingLexer implements FlexLexer {
  /** initial size of the lookahead buffer */
  private static final int ZZ_BUFFERSIZE = 16384;

  /** lexical states */
  public static final int YYINITIAL = 0;

  /**
   * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
   * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
   *                  at the beginning of a line
   * l is of the form l = 2*k, k a non negative integer
   */
  private static final int ZZ_LEXSTATE[] = { 
     0, 0
  };

  /** 
   * Translates characters to character classes
   */
  private static final String ZZ_CMAP_PACKED = 
    "\11\0\1\3\1\1\1\0\1\2\1\1\22\0\1\3\1\0\1\5"+
    "\1\60\1\0\2\12\1\0\1\72\1\72\2\12\1\73\1\12\1\0"+
    "\1\4\1\13\1\41\1\42\1\43\1\44\1\45\1\47\1\11\1\37"+
    "\1\40\1\16\1\0\1\74\1\0\1\75\2\0\1\26\1\24\1\30"+
    "\1\25\1\20\1\31\1\21\1\46\1\35\1\53\1\52\1\22\1\50"+
    "\1\33\1\23\1\27\1\54\1\36\1\34\1\17\1\32\1\56\1\51"+
    "\1\15\1\55\1\57\3\0\1\12\1\6\1\0\2\10\1\63\1\66"+
    "\1\67\1\70\2\6\1\61\2\6\1\64\1\6\1\62\4\6\1\71"+
    "\1\6\1\65\2\6\1\14\2\6\1\0\1\12\1\0\1\12\53\0"+
    "\1\6\12\0\1\6\1\0\1\6\2\0\1\6\5\0\27\6\1\0"+
    "\37\6\1\0\u01ca\6\4\0\14\6\16\0\5\6\7\0\1\6\1\0"+
    "\1\6\201\0\5\6\1\0\2\6\2\0\4\6\10\0\1\6\1\0"+
    "\3\6\1\0\1\6\1\0\24\6\1\0\123\6\1\0\213\6\10\0"+
    "\236\6\11\0\46\6\2\0\1\6\7\0\47\6\110\0\33\6\5\0"+
    "\3\6\55\0\53\6\25\0\12\7\4\0\2\6\1\0\143\6\1\0"+
    "\1\6\17\0\2\6\7\0\2\6\12\7\3\6\2\0\1\6\20\0"+
    "\1\6\1\0\36\6\35\0\131\6\13\0\1\6\16\0\12\7\41\6"+
    "\11\0\2\6\4\0\1\6\5\0\26\6\4\0\1\6\11\0\1\6"+
    "\3\0\1\6\27\0\31\6\107\0\1\6\1\0\13\6\127\0\66\6"+
    "\3\0\1\6\22\0\1\6\7\0\12\6\4\0\12\7\1\0\7\6"+
    "\1\0\7\6\5\0\10\6\2\0\2\6\2\0\26\6\1\0\7\6"+
    "\1\0\1\6\3\0\4\6\3\0\1\6\20\0\1\6\15\0\2\6"+
    "\1\0\3\6\4\0\12\7\2\6\23\0\6\6\4\0\2\6\2\0"+
    "\26\6\1\0\7\6\1\0\2\6\1\0\2\6\1\0\2\6\37\0"+
    "\4\6\1\0\1\6\7\0\12\7\2\0\3\6\20\0\11\6\1\0"+
    "\3\6\1\0\26\6\1\0\7\6\1\0\2\6\1\0\5\6\3\0"+
    "\1\6\22\0\1\6\17\0\2\6\4\0\12\7\25\0\10\6\2\0"+
    "\2\6\2\0\26\6\1\0\7\6\1\0\2\6\1\0\5\6\3\0"+
    "\1\6\36\0\2\6\1\0\3\6\4\0\12\7\1\0\1\6\21\0"+
    "\1\6\1\0\6\6\3\0\3\6\1\0\4\6\3\0\2\6\1\0"+
    "\1\6\1\0\2\6\3\0\2\6\3\0\3\6\3\0\14\6\26\0"+
    "\1\6\25\0\12\7\25\0\10\6\1\0\3\6\1\0\27\6\1\0"+
    "\12\6\1\0\5\6\3\0\1\6\32\0\2\6\6\0\2\6\4\0"+
    "\12\7\25\0\10\6\1\0\3\6\1\0\27\6\1\0\12\6\1\0"+
    "\5\6\3\0\1\6\40\0\1\6\1\0\2\6\4\0\12\7\1\0"+
    "\2\6\22\0\10\6\1\0\3\6\1\0\51\6\2\0\1\6\20\0"+
    "\1\6\21\0\2\6\4\0\12\7\12\0\6\6\5\0\22\6\3\0"+
    "\30\6\1\0\11\6\1\0\1\6\2\0\7\6\72\0\60\6\1\0"+
    "\2\6\14\0\7\6\11\0\12\7\47\0\2\6\1\0\1\6\2\0"+
    "\2\6\1\0\1\6\2\0\1\6\6\0\4\6\1\0\7\6\1\0"+
    "\3\6\1\0\1\6\1\0\1\6\2\0\2\6\1\0\4\6\1\0"+
    "\2\6\11\0\1\6\2\0\5\6\1\0\1\6\11\0\12\7\2\0"+
    "\4\6\40\0\1\6\37\0\12\7\26\0\10\6\1\0\44\6\33\0"+
    "\5\6\163\0\53\6\24\0\1\6\12\7\6\0\6\6\4\0\4\6"+
    "\3\0\1\6\3\0\2\6\7\0\3\6\4\0\15\6\14\0\1\6"+
    "\1\0\12\7\6\0\46\6\1\0\1\6\5\0\1\6\2\0\53\6"+
    "\1\0\u014d\6\1\0\4\6\2\0\7\6\1\0\1\6\1\0\4\6"+
    "\2\0\51\6\1\0\4\6\2\0\41\6\1\0\4\6\2\0\7\6"+
    "\1\0\1\6\1\0\4\6\2\0\17\6\1\0\71\6\1\0\4\6"+
    "\2\0\103\6\45\0\20\6\20\0\125\6\14\0\u026c\6\2\0\21\6"+
    "\1\0\32\6\5\0\113\6\25\0\15\6\1\0\4\6\16\0\22\6"+
    "\16\0\22\6\16\0\15\6\1\0\3\6\17\0\64\6\43\0\1\6"+
    "\4\0\1\6\3\0\12\7\46\0\12\7\6\0\130\6\10\0\51\6"+
    "\1\0\1\6\5\0\106\6\12\0\35\6\51\0\12\7\36\6\2\0"+
    "\5\6\13\0\54\6\25\0\7\6\10\0\12\7\46\0\27\6\11\0"+
    "\65\6\53\0\12\7\6\0\12\7\15\0\1\6\135\0\57\6\21\0"+
    "\7\6\4\0\12\7\51\0\36\6\15\0\2\6\12\7\54\6\32\0"+
    "\44\6\34\0\12\7\3\0\3\6\12\7\44\6\153\0\4\6\1\0"+
    "\4\6\3\0\2\6\11\0\300\6\100\0\u0116\6\2\0\6\6\2\0"+
    "\46\6\2\0\6\6\2\0\10\6\1\0\1\6\1\0\1\6\1\0"+
    "\1\6\1\0\37\6\2\0\65\6\1\0\7\6\1\0\1\6\3\0"+
    "\3\6\1\0\7\6\3\0\4\6\2\0\6\6\4\0\15\6\5\0"+
    "\3\6\1\0\7\6\164\0\1\6\15\0\1\6\20\0\15\6\145\0"+
    "\1\6\4\0\1\6\2\0\12\6\1\0\1\6\3\0\5\6\6\0"+
    "\1\6\1\0\1\6\1\0\1\6\1\0\4\6\1\0\13\6\2\0"+
    "\4\6\5\0\5\6\4\0\1\6\64\0\2\6\220\0\1\6\u09ea\0"+
    "\57\6\1\0\57\6\1\0\205\6\6\0\4\6\3\0\2\6\14\0"+
    "\46\6\1\0\1\6\5\0\1\6\2\0\70\6\7\0\1\6\20\0"+
    "\27\6\11\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0"+
    "\7\6\1\0\7\6\1\0\7\6\1\0\7\6\120\0\1\6\u01d5\0"+
    "\2\6\52\0\5\6\5\0\2\6\4\0\126\6\6\0\3\6\1\0"+
    "\132\6\1\0\4\6\5\0\51\6\3\0\136\6\21\0\33\6\65\0"+
    "\20\6\u0200\0\u19b6\6\112\0\u51cd\6\63\0\u048d\6\103\0\56\6\2\0"+
    "\u010d\6\3\0\20\6\12\7\2\6\24\0\57\6\20\0\31\6\10\0"+
    "\106\6\61\0\11\6\2\0\147\6\2\0\4\6\1\0\4\6\14\0"+
    "\13\6\115\0\12\6\1\0\3\6\1\0\4\6\1\0\27\6\35\0"+
    "\64\6\16\0\62\6\34\0\12\7\30\0\6\6\3\0\1\6\4\0"+
    "\12\7\34\6\12\0\27\6\31\0\35\6\7\0\57\6\34\0\1\6"+
    "\12\7\46\0\51\6\27\0\3\6\1\0\10\6\4\0\12\7\6\0"+
    "\27\6\3\0\1\6\5\0\60\6\1\0\1\6\3\0\2\6\2\0"+
    "\5\6\2\0\1\6\1\0\1\6\30\0\3\6\2\0\13\6\7\0"+
    "\3\6\14\0\6\6\2\0\6\6\2\0\6\6\11\0\7\6\1\0"+
    "\7\6\221\0\43\6\15\0\12\7\6\0\u2ba4\6\14\0\27\6\4\0"+
    "\61\6\u2104\0\u016e\6\2\0\152\6\46\0\7\6\14\0\5\6\5\0"+
    "\1\6\1\0\12\6\1\0\15\6\1\0\5\6\1\0\1\6\1\0"+
    "\2\6\1\0\2\6\1\0\154\6\41\0\u016b\6\22\0\100\6\2\0"+
    "\66\6\50\0\14\6\164\0\5\6\1\0\207\6\23\0\12\7\7\0"+
    "\32\6\6\0\32\6\13\0\131\6\3\0\6\6\2\0\6\6\2\0"+
    "\6\6\2\0\3\6\43\0";

  /** 
   * Translates characters to character classes
   */
  private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);

  /** 
   * Translates DFA states to action switch labels.
   */
  private static final int [] ZZ_ACTION = zzUnpackAction();

  private static final String ZZ_ACTION_PACKED_0 =
    "\1\0\1\1\2\2\1\3\1\1\1\4\1\5\1\3"+
    "\1\5\27\4\1\1\1\6\1\7\2\1\1\10\1\0"+
    "\1\11\1\12\1\0\1\13\10\4\1\13\22\4\1\13"+
    "\5\4\1\13\11\4\1\14\6\4\1\13\16\4\1\14"+
    "\4\4\1\13\2\4\1\13\10\4\1\14\1\4\1\14"+
    "\32\4\7\15\1\4\1\15\6\4\4\0\1\16\10\4"+
    "\1\13\2\4\1\17\145\4\1\17\10\4\1\15\4\4"+
    "\1\17\1\15\22\4\5\0\3\4\1\20\3\4\1\15"+
    "\14\4\1\15\57\4\1\15\26\4\4\15\3\4\2\15"+
    "\6\4\5\0\4\4\1\21\11\4\2\15\32\4\3\15"+
    "\1\4\1\15\2\4\1\15\23\4\3\0\1\22\1\4"+
    "\1\15\7\4\1\15\11\4\1\15\11\4\1\0\35\4";

  private static int [] zzUnpackAction() {
    int [] result = new int[570];
    int offset = 0;
    offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackAction(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }


  /** 
   * Translates a state to a row index in the transition table
   */
  private static final int [] ZZ_ROWMAP = zzUnpackRowMap();

  private static final String ZZ_ROWMAP_PACKED_0 =
    "\0\0\0\76\0\174\0\76\0\272\0\370\0\u0136\0\u0174"+
    "\0\76\0\u01b2\0\u01f0\0\u022e\0\u026c\0\u02aa\0\u02e8\0\u0326"+
    "\0\u0364\0\u03a2\0\u03e0\0\u041e\0\u045c\0\u049a\0\u04d8\0\u0516"+
    "\0\u0554\0\u0592\0\u05d0\0\u060e\0\u064c\0\u068a\0\u06c8\0\u0706"+
    "\0\u0744\0\u0782\0\76\0\76\0\u07c0\0\u07fe\0\u083c\0\370"+
    "\0\76\0\76\0\u087a\0\u0136\0\u08b8\0\u08f6\0\u0934\0\u0972"+
    "\0\u09b0\0\u09ee\0\u0a2c\0\u0a6a\0\u0aa8\0\u0ae6\0\u0b24\0\u0b62"+
    "\0\u0ba0\0\u0bde\0\u0c1c\0\u0c5a\0\u0c98\0\u0cd6\0\u0d14\0\u0d52"+
    "\0\u0d90\0\u0dce\0\u0e0c\0\u0e4a\0\u0e88\0\u0ec6\0\u0f04\0\u0f42"+
    "\0\u0f80\0\u0fbe\0\u0ffc\0\u103a\0\u1078\0\u10b6\0\u10f4\0\u1132"+
    "\0\u1170\0\u11ae\0\u11ec\0\u122a\0\u1268\0\u12a6\0\u12e4\0\u1322"+
    "\0\u1360\0\u139e\0\u13dc\0\u141a\0\u1458\0\u1496\0\u14d4\0\u1512"+
    "\0\u1550\0\u158e\0\u15cc\0\u160a\0\u1648\0\u1686\0\u16c4\0\u1702"+
    "\0\u1740\0\u177e\0\u17bc\0\u17fa\0\u1838\0\u1876\0\u18b4\0\u18f2"+
    "\0\u1930\0\u196e\0\u19ac\0\u19ea\0\u1a28\0\u1a66\0\u1aa4\0\u1ae2"+
    "\0\u1b20\0\u1b5e\0\u1b9c\0\u1bda\0\u1c18\0\u1c56\0\u1c94\0\u1cd2"+
    "\0\u0f42\0\u1d10\0\u1d4e\0\u1d8c\0\u1dca\0\u1e08\0\u1e46\0\u1e84"+
    "\0\u1ec2\0\u1f00\0\u1f3e\0\u1f7c\0\u1fba\0\u1ff8\0\u2036\0\u2074"+
    "\0\u20b2\0\u20f0\0\u212e\0\u216c\0\u21aa\0\u21e8\0\u2226\0\u2264"+
    "\0\u22a2\0\u22e0\0\u231e\0\u1550\0\u235c\0\u239a\0\u23d8\0\u2416"+
    "\0\u2454\0\u2492\0\u24d0\0\u0136\0\u250e\0\u254c\0\u258a\0\u25c8"+
    "\0\u2606\0\u2644\0\u2682\0\u26c0\0\u26fe\0\u273c\0\u087a\0\u277a"+
    "\0\u27b8\0\u27f6\0\u2834\0\u2872\0\u28b0\0\u28ee\0\u292c\0\u296a"+
    "\0\u29a8\0\u29e6\0\u0136\0\u2a24\0\u2a62\0\u2aa0\0\u2ade\0\u2b1c"+
    "\0\u2b5a\0\u2b98\0\u2bd6\0\u2c14\0\u2c52\0\u2c90\0\u2cce\0\u2d0c"+
    "\0\u2d4a\0\u2d88\0\u2dc6\0\u2e04\0\u2416\0\u2e42\0\u2e80\0\u2ebe"+
    "\0\u2efc\0\u2f3a\0\u2f78\0\u2fb6\0\u2ff4\0\u3032\0\u3070\0\u30ae"+
    "\0\u30ec\0\u312a\0\u3168\0\u31a6\0\u31e4\0\u3222\0\u3260\0\u329e"+
    "\0\u32dc\0\u331a\0\u3358\0\u3396\0\u33d4\0\u3412\0\u3450\0\u348e"+
    "\0\u34cc\0\u350a\0\u3548\0\u3586\0\u35c4\0\u3602\0\u3640\0\u367e"+
    "\0\u36bc\0\u36fa\0\u3738\0\u3776\0\u37b4\0\u37f2\0\u3830\0\u386e"+
    "\0\u38ac\0\u38ea\0\u3928\0\u3966\0\u39a4\0\u39e2\0\u3a20\0\u3a5e"+
    "\0\u3a9c\0\u3ada\0\u3b18\0\u3b56\0\u3b94\0\u3bd2\0\u3c10\0\u3c4e"+
    "\0\u3c8c\0\u3cca\0\u3d08\0\u3d46\0\u3d84\0\u3dc2\0\u3e00\0\u3e3e"+
    "\0\u3e7c\0\u3eba\0\u3ef8\0\u3f36\0\u3f74\0\u3fb2\0\u3ff0\0\u402e"+
    "\0\u406c\0\u40aa\0\u40e8\0\u4126\0\u4164\0\u41a2\0\u41e0\0\u421e"+
    "\0\u425c\0\u429a\0\u42d8\0\u4316\0\u4354\0\u4392\0\u43d0\0\u440e"+
    "\0\u444c\0\u16c4\0\u448a\0\u44c8\0\u4506\0\u4544\0\u4582\0\u45c0"+
    "\0\u45fe\0\u463c\0\u467a\0\u46b8\0\u46f6\0\u4734\0\u4772\0\u47b0"+
    "\0\u47ee\0\u482c\0\u486a\0\u48a8\0\u48e6\0\u4924\0\u4962\0\u49a0"+
    "\0\u49de\0\u4a1c\0\u4a5a\0\u4a98\0\u4ad6\0\u4b14\0\u4b52\0\u4b90"+
    "\0\u4bce\0\u4c0c\0\u0136\0\u4c4a\0\u4c88\0\u4cc6\0\u4d04\0\u4d42"+
    "\0\u4d80\0\u4dbe\0\u4dfc\0\u4e3a\0\u4e78\0\u4eb6\0\u4ef4\0\u4f32"+
    "\0\u4f70\0\u4fae\0\u4fec\0\u502a\0\u5068\0\u50a6\0\u50e4\0\u5122"+
    "\0\u5160\0\u519e\0\u51dc\0\u521a\0\u5258\0\u5296\0\u52d4\0\u5312"+
    "\0\u45c0\0\u5350\0\u538e\0\u53cc\0\u540a\0\u5448\0\u5486\0\u54c4"+
    "\0\u5502\0\u5540\0\u557e\0\u55bc\0\u55fa\0\u5638\0\u5676\0\u56b4"+
    "\0\u56f2\0\u5730\0\u576e\0\u57ac\0\u57ea\0\u5828\0\u5866\0\u58a4"+
    "\0\u58e2\0\u5920\0\u595e\0\u599c\0\u59da\0\u5a18\0\u5a56\0\u5a94"+
    "\0\u5ad2\0\u5b10\0\u5b4e\0\u5b8c\0\u5bca\0\u5c08\0\u5c46\0\u5c84"+
    "\0\u5cc2\0\u5d00\0\u5d3e\0\u5d7c\0\u5dba\0\u5df8\0\u235c\0\u5e36"+
    "\0\u23d8\0\u5e74\0\u5eb2\0\u5ef0\0\u5f2e\0\u5f6c\0\u5faa\0\u5fe8"+
    "\0\u6026\0\u6064\0\u60a2\0\u60e0\0\u611e\0\u615c\0\u619a\0\u61d8"+
    "\0\u6216\0\u6254\0\u6292\0\u62d0\0\u630e\0\u634c\0\u638a\0\u63c8"+
    "\0\u6406\0\u6444\0\u6482\0\u64c0\0\u64fe\0\u653c\0\u657a\0\u65b8"+
    "\0\u65f6\0\u6634\0\u0136\0\u6672\0\u66b0\0\u66ee\0\u672c\0\u676a"+
    "\0\u67a8\0\u67e6\0\u6824\0\u6862\0\u3032\0\u68a0\0\u68de\0\u691c"+
    "\0\u695a\0\u6998\0\u69d6\0\u6a14\0\u6a52\0\u6a90\0\u6ace\0\u6b0c"+
    "\0\u6b4a\0\u6b88\0\u6bc6\0\u6c04\0\u6c42\0\u6c80\0\u6cbe\0\u6cfc"+
    "\0\u6d3a\0\u6d78\0\u6db6\0\u6df4\0\u6e32\0\u6e70\0\u6eae\0\u6eec"+
    "\0\u3e7c\0\u5c08\0\u6f2a\0\u6f68\0\u6fa6\0\u6fe4\0\u7022\0\u7060"+
    "\0\u709e\0\u70dc\0\u711a\0\u7158\0\u7196\0\u71d4\0\u7212\0\u7250"+
    "\0\u728e\0\u72cc\0\u730a\0\u60e0\0\u7348\0\u7386\0\u73c4\0\u7402"+
    "\0\u7440\0\u747e\0\u74bc\0\u74fa\0\u7538\0\u7576\0\76\0\u75b4"+
    "\0\u75f2\0\u7630\0\u766e\0\u76ac\0\u76ea\0\u7728\0\u7766\0\u77a4"+
    "\0\u5920\0\u77e2\0\u7820\0\u785e\0\u789c\0\u78da\0\u7918\0\u7956"+
    "\0\u7994\0\u79d2\0\u7a10\0\u7a4e\0\u7a8c\0\u7aca\0\u7b08\0\u7b46"+
    "\0\u7b84\0\u7bc2\0\u7c00\0\u7c3e\0\u7c7c\0\u7cba\0\u7cf8\0\u7d36"+
    "\0\u7d74\0\u7db2\0\u7df0\0\u7e2e\0\u7e6c\0\u7eaa\0\u7ee8\0\u7f26"+
    "\0\u7f64\0\u7fa2\0\u7fe0\0\u801e\0\u805c\0\u809a\0\u80d8\0\u8116"+
    "\0\u8154\0\u8192\0\u81d0\0\u820e\0\u824c\0\u828a\0\u82c8\0\u8306"+
    "\0\u8344\0\u8382";

  private static int [] zzUnpackRowMap() {
    int [] result = new int[570];
    int offset = 0;
    offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackRowMap(String packed, int offset, int [] result) {
    int i = 0;  /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int high = packed.charAt(i++) << 16;
      result[j++] = high | packed.charAt(i++);
    }
    return j;
  }

  /** 
   * The transition table of the DFA
   */
  private static final int [] ZZ_TRANS = zzUnpackTrans();

  private static final String ZZ_TRANS_PACKED_0 =
    "\1\2\1\3\1\4\1\3\1\5\1\6\1\7\1\2"+
    "\1\7\1\10\1\11\1\12\1\7\1\13\1\2\1\14"+
    "\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24"+
    "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\7\10"+
    "\1\34\1\10\1\35\1\36\1\7\1\37\1\40\1\7"+
    "\1\41\1\7\1\42\11\7\1\43\1\44\1\45\1\46"+
    "\77\0\1\3\1\0\1\3\76\0\1\47\71\0\5\50"+
    "\1\51\70\50\6\0\4\7\1\0\3\7\1\52\41\7"+
    "\1\0\11\7\15\0\1\10\1\0\1\10\23\0\7\10"+
    "\1\0\1\10\42\0\2\53\66\0\3\7\1\54\1\0"+
    "\1\54\2\7\1\52\1\55\1\56\1\7\1\57\1\60"+
    "\1\61\1\7\1\62\1\7\1\63\5\7\1\64\2\54"+
    "\1\65\4\54\1\7\1\54\10\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\7\1\66\1\7\1\67"+
    "\3\7\1\70\7\7\1\71\21\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\14\7\1\72\1\54\13\7"+
    "\1\73\7\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\3\7\1\74\2\7\1\75\6\7\1\54\23\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\1\7"+
    "\1\76\2\7\1\77\1\7\1\100\1\101\2\7\1\102"+
    "\2\7\1\103\23\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\13\7\1\104\3\7\1\105\21\7\1\0"+
    "\11\7\12\0\4\7\1\0\2\7\1\54\1\52\1\106"+
    "\2\7\1\54\1\107\3\7\1\110\4\7\1\111\11\7"+
    "\1\54\6\7\1\112\2\7\1\0\11\7\12\0\4\7"+
    "\1\0\2\7\1\54\1\52\1\7\1\113\1\7\1\54"+
    "\3\7\1\114\3\7\1\115\1\7\1\54\1\116\1\71"+
    "\7\7\1\54\11\7\1\0\11\7\12\0\4\7\1\0"+
    "\2\7\1\54\1\52\1\7\1\117\1\7\1\54\2\7"+
    "\1\120\1\121\4\7\1\122\2\7\1\123\7\7\1\54"+
    "\11\7\1\0\11\7\12\0\4\7\1\0\2\7\1\124"+
    "\1\52\1\7\1\125\2\7\1\126\2\7\1\127\1\7"+
    "\1\130\1\131\1\132\1\7\1\133\1\134\1\135\11\7"+
    "\1\136\7\7\1\0\11\7\12\0\4\7\1\0\2\7"+
    "\1\54\1\52\3\7\1\137\1\140\1\7\1\141\1\142"+
    "\1\143\4\7\1\54\1\7\1\144\7\7\1\54\1\7"+
    "\1\145\1\146\2\7\1\147\1\7\1\150\1\7\1\0"+
    "\11\7\12\0\3\7\1\54\1\0\1\54\1\7\1\151"+
    "\1\52\1\152\2\7\1\153\2\7\1\154\1\155\1\156"+
    "\1\157\1\160\1\161\1\162\1\163\1\164\1\165\2\7"+
    "\1\54\1\166\3\54\1\7\1\54\1\167\4\7\1\170"+
    "\2\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\11\7\1\171\2\7\1\172\24\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\7\1\173\2\7\1\174"+
    "\34\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\1\175\1\176\3\7\1\177\1\7\1\200\1\201\1\202"+
    "\1\102\1\203\1\7\1\54\1\110\10\7\1\204\2\7"+
    "\1\205\2\7\1\206\1\207\2\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\6\7\1\210\5\7\1\211"+
    "\2\7\1\212\11\7\1\213\7\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\7\1\214\2\7\1\215"+
    "\1\7\1\216\2\7\1\217\3\7\1\220\2\7\2\110"+
    "\1\221\16\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\3\7\1\222\35\7\1\0\11\7\12\0\3\7"+
    "\1\54\1\0\1\54\2\7\1\52\4\7\1\223\2\7"+
    "\1\224\2\7\1\102\1\225\1\7\1\226\1\227\3\7"+
    "\5\54\1\7\1\54\10\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\4\7\1\230\1\231\1\7\1\232"+
    "\7\7\1\233\21\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\1\7\1\234\1\235\1\236\1\237\1\240"+
    "\1\7\1\240\1\241\1\242\2\7\1\243\1\244\11\7"+
    "\1\245\1\7\1\246\6\7\1\244\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\13\7\1\247\25\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\1\7\1\250"+
    "\6\7\1\251\27\7\1\252\1\0\11\7\65\0\1\253"+
    "\3\0\1\254\1\255\1\256\102\0\1\11\76\0\1\11"+
    "\1\47\1\0\74\47\10\0\2\257\1\0\1\257\4\0"+
    "\1\257\3\0\3\257\1\0\2\257\5\0\7\257\1\0"+
    "\1\257\13\0\1\257\2\0\3\257\13\0\4\7\1\0"+
    "\3\7\1\52\1\7\1\152\37\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\14\7\1\146\24\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\7\7\1\222"+
    "\31\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\17\7\1\105\21\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\1\7\1\260\37\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\5\7\1\261\1\262\2\7"+
    "\1\263\27\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\27\7\1\264\11\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\7\1\265\37\7\1\0\11\7"+
    "\12\0\4\7\1\0\1\54\2\7\1\52\22\7\5\54"+
    "\12\7\1\0\11\7\12\0\4\7\1\0\2\7\1\266"+
    "\1\52\15\7\1\267\23\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\15\7\1\270\23\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\15\7\1\271\23\7"+
    "\1\0\11\7\12\0\3\7\1\54\1\0\1\54\2\7"+
    "\1\52\22\7\5\54\1\7\1\54\10\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\1\272\5\7\1\273"+
    "\32\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\31\7\1\274\7\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\4\7\1\275\34\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\276\40\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\7\7\1\277\31\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\4\7"+
    "\1\300\1\7\1\301\2\7\1\302\2\7\1\303\24\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\1\276"+
    "\30\7\1\304\7\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\15\7\1\222\1\7\1\305\7\7\1\306"+
    "\11\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\1\7\1\307\37\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\3\7\1\305\35\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\310\40\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\3\7\1\244\1\7"+
    "\1\244\2\7\1\311\21\7\1\244\2\7\1\244\3\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\3\7"+
    "\1\244\5\7\1\312\3\7\1\312\1\7\1\312\12\7"+
    "\1\244\2\7\1\244\3\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\13\7\1\313\25\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\5\7\1\54\33\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\12\7"+
    "\1\312\4\7\1\312\12\7\1\314\6\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\1\315\40\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\11\7\1\316"+
    "\27\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\1\317\6\7\1\244\5\7\1\244\23\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\10\7\1\320\30\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\5\7"+
    "\1\54\31\7\1\321\1\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\15\7\1\322\23\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\6\7\1\321\2\7"+
    "\1\316\22\7\1\323\4\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\6\7\2\244\5\7\1\244\13\7"+
    "\1\244\7\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\6\7\1\324\32\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\10\7\1\325\30\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\4\7\1\326\34\7"+
    "\1\0\11\7\12\0\4\7\1\0\2\7\1\327\1\52"+
    "\41\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\10\7\1\330\6\7\1\244\21\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\6\7\1\331\2\7\1\332"+
    "\1\7\1\333\1\334\22\7\1\335\1\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\3\7\1\336\2\7"+
    "\1\337\22\7\1\340\7\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\7\7\1\341\1\342\1\343\2\7"+
    "\1\344\1\345\1\7\1\346\3\7\1\347\5\7\1\350"+
    "\7\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\14\7\1\351\1\352\23\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\3\7\1\353\3\7\1\354\3\7"+
    "\1\355\3\7\1\356\7\7\1\357\2\7\1\360\6\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\14\7"+
    "\1\361\6\7\1\362\15\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\7\1\363\37\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\4\7\1\364\2\7"+
    "\1\365\3\7\1\366\2\7\1\367\22\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\1\274\5\7\1\244"+
    "\2\7\1\244\4\7\1\244\22\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\31\7\1\370\7\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\35\7\1\244"+
    "\3\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\3\7\1\371\35\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\13\7\1\372\25\7\1\0\11\7\12\0"+
    "\3\7\1\54\1\0\1\54\2\7\1\52\11\7\1\373"+
    "\6\7\2\54\1\65\4\54\1\7\1\54\10\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\4\7\1\374"+
    "\3\7\1\375\1\244\27\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\6\7\1\244\32\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\4\7\1\244\34\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\1\376"+
    "\40\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\1\377\6\7\1\u0100\1\7\1\u0101\3\7\1\u0102\1\7"+
    "\1\u0103\21\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\15\7\1\222\23\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\6\7\1\u0104\32\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\1\7\1\u0105\14\7"+
    "\1\u0106\22\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\5\7\1\274\1\u0107\32\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\u0108\6\7\1\u0109\7\7"+
    "\1\u010a\21\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\3\7\1\u010b\1\u010c\22\7\1\274\1\7\1\u010d"+
    "\7\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\17\7\1\u010e\21\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\11\7\1\u010f\2\7\1\u0110\24\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\4\7\1\u0111"+
    "\34\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\1\u0112\6\7\1\u0113\1\7\1\u0114\1\7\1\u0115\2\7"+
    "\1\u0116\16\7\1\u0117\3\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\14\7\1\u0118\24\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\14\7\1\u0119\1\u011a"+
    "\23\7\1\0\11\7\12\0\4\7\1\0\2\7\1\u011b"+
    "\1\52\41\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\4\7\1\u011c\6\7\1\u011d\25\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\3\7\1\u011e\35\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\4\7"+
    "\1\140\34\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\10\7\1\u011f\30\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\7\1\u0120\1\316\36\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\1\316\7\7"+
    "\1\u0121\1\7\1\u0122\2\7\1\u0123\23\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\4\7\1\301\1\7"+
    "\1\244\2\7\1\244\4\7\1\244\12\7\1\304\7\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\1\u0124"+
    "\40\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\5\7\1\316\33\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\3\7\1\316\13\7\1\316\7\7\1\306"+
    "\11\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\7\7\1\301\31\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\5\7\1\321\33\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\316\7\7\1\u0125"+
    "\3\7\1\316\21\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\7\7\1\u0126\31\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\17\7\1\u0127\21\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\15\7\1\u0128"+
    "\23\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\1\276\15\7\1\u0129\22\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\u012a\2\7\1\244\1\7\1\244"+
    "\3\7\1\316\3\7\1\u012b\14\7\1\244\4\7\1\u012c"+
    "\1\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\1\7\1\u012d\37\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\13\7\1\u012e\25\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\u012f\7\7\1\u0130\30\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\3\7"+
    "\1\316\2\7\1\u0131\4\7\1\u0132\3\7\1\316\21\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\1\u0133"+
    "\7\7\1\u0134\20\7\1\u0135\7\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\316\4\7\1\u0136"+
    "\6\7\1\316\21\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\31\7\1\244\3\7\1\u0137\3\7\1\0"+
    "\11\7\12\0\4\7\1\0\1\110\2\7\1\52\22\7"+
    "\5\110\12\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\1\244\40\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\6\7\1\315\30\7\1\u0138\1\7\1\0"+
    "\11\7\12\0\4\7\1\0\2\7\1\u0139\1\52\15\7"+
    "\1\u013a\23\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\3\7\1\321\35\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\32\7\1\54\6\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\14\7\1\u0139\24\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\17\7"+
    "\1\146\21\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\16\7\1\u013b\22\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\16\7\1\222\22\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\7\7\1\u013c\21\7"+
    "\1\u0135\7\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\2\244\37\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\2\244\2\7\1\244\10\7\1\244\23\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\11\7"+
    "\1\244\3\7\1\244\23\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\7\1\244\37\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\1\7\1\244\1\7"+
    "\2\244\4\7\1\244\3\7\1\244\23\7\1\0\11\7"+
    "\12\0\4\7\1\0\2\7\1\u013d\1\52\11\7\1\244"+
    "\3\7\1\244\23\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\1\7\1\244\2\240\1\244\1\240\1\7"+
    "\1\240\2\244\3\7\1\244\22\7\1\244\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\15\7\2\244\22\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\10\7"+
    "\1\273\5\7\1\244\22\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\7\7\1\146\31\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\17\7\1\u013e\21\7"+
    "\1\0\11\7\12\0\4\7\1\0\2\7\1\124\1\52"+
    "\1\55\4\7\1\u013f\1\7\1\56\1\7\1\u0140\17\7"+
    "\1\u0141\7\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\1\7\1\u0142\37\7\1\0\11\7\66\0\1\u0143"+
    "\5\0\1\u0144\67\0\1\u0144\102\0\1\u0145\70\0\1\u0146"+
    "\1\0\1\u0147\17\0\4\7\1\0\3\7\1\52\2\7"+
    "\1\u0148\36\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\4\7\1\u0117\34\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\6\7\1\316\32\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\35\7\1\u0149\3\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\2\7"+
    "\1\316\36\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\3\7\1\u014a\35\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\u014b\40\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\316\40\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\5\7\1\u014c\33\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\33\7"+
    "\1\54\5\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\1\7\1\326\37\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\15\7\1\244\23\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\5\7\1\u014d\33\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\17\7"+
    "\1\54\21\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\3\7\1\244\26\7\1\244\2\7\1\244\1\7"+
    "\1\u014e\1\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\10\7\1\u014f\30\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\15\7\1\316\23\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\33\7\1\244\5\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\2\7"+
    "\1\244\36\7\1\0\11\7\12\0\4\7\1\0\2\7"+
    "\1\u0150\1\52\41\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\3\7\1\244\26\7\1\244\6\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\12\7\1\244"+
    "\26\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\14\7\1\u0151\24\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\3\7\1\244\1\7\1\244\7\7\1\u012b"+
    "\14\7\1\244\6\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\6\7\1\244\6\7\1\244\23\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\3\7\1\244"+
    "\26\7\1\244\2\7\1\244\3\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\14\7\1\u0152\24\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\7\7\1\u0153"+
    "\31\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\3\7\1\244\1\7\1\244\24\7\1\244\2\7\1\244"+
    "\3\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\7\7\1\u014b\31\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\4\7\1\u0154\34\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\244\1\7\1\244"+
    "\2\7\1\311\4\7\1\311\14\7\1\244\2\7\1\244"+
    "\3\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\1\7\1\u0155\4\7\1\u0156\7\7\1\u0134\14\7\1\u0157"+
    "\5\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\15\7\1\u0111\23\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\3\7\1\244\1\7\1\244\2\7\1\311"+
    "\3\7\1\u0158\15\7\1\244\2\7\1\244\3\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\3\7\1\244"+
    "\35\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\17\7\1\244\21\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\1\u0159\40\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\3\7\1\244\3\7\1\305\2\7"+
    "\1\312\17\7\1\244\2\7\1\244\3\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\6\7\1\u015a\32\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\33\7"+
    "\1\u015b\5\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\15\7\1\315\23\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\6\7\1\u015c\32\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\2\7\1\u015d\36\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\31\7"+
    "\1\u015e\7\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\7\7\1\u015f\31\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\10\7\1\u0160\30\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\6\7\1\146\2\7"+
    "\1\u0161\27\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\14\7\1\344\24\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\31\7\1\u0162\7\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\7\7\1\u0163\31\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\13\7"+
    "\1\u0164\25\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\11\7\1\u0165\3\7\1\u0166\23\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\16\7\1\u0167\22\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\7\7"+
    "\1\u0168\3\7\1\325\2\7\1\u0169\22\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\10\7\1\u016a\30\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\27\7"+
    "\1\330\11\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\3\7\1\u016b\35\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\6\7\1\u016c\32\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\5\7\1\u015a\33\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\3\7"+
    "\1\u016b\3\7\1\305\31\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\13\7\1\u016d\25\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\7\7\1\123\31\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\15\7"+
    "\1\u016e\23\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\12\7\1\u0167\26\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\12\7\1\u016f\26\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\37\7\1\u0170\1\7"+
    "\1\0\11\7\12\0\4\7\1\0\2\7\1\u0171\1\52"+
    "\6\7\1\u0172\32\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\3\7\1\u0173\35\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\14\7\1\u0171\24\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\16\7\1\u0174"+
    "\22\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\3\7\1\273\35\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\16\7\1\146\22\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\24\7\1\u0175\14\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\37\7\1\u0176"+
    "\1\7\1\0\11\7\12\0\4\7\1\0\2\7\1\u0177"+
    "\1\52\3\7\1\244\1\7\1\244\2\7\1\311\4\7"+
    "\1\u0178\14\7\1\244\2\7\1\244\3\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\1\u0179\7\7\1\u017a"+
    "\4\7\1\u017b\23\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\17\7\1\u017c\21\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\31\7\1\244\7\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\27\7\1\146"+
    "\11\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\7\7\1\u017d\31\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\15\7\1\u017e\23\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\7\1\u017f\1\7\1\u0180"+
    "\4\7\1\u0181\1\u0182\10\7\1\244\15\7\1\244\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\11\7\1\u0183"+
    "\27\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\37\7\1\u0184\1\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\6\7\1\u0185\32\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\7\7\1\u0169\31\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\1\u0108\40\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\1\7"+
    "\1\u0186\37\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\1\7\1\u0168\37\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\15\7\1\244\13\7\1\u0187\7\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\4\7"+
    "\1\u0188\34\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\1\7\1\315\37\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\4\7\1\u0189\34\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\11\7\1\u018a\27\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\10\7"+
    "\1\244\30\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\1\7\1\u017f\7\7\1\u0182\3\7\1\u0182\23\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\37\7"+
    "\1\315\1\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\7\7\1\u018b\31\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\5\7\1\u0184\33\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\14\7\1\u018c\24\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\17\7"+
    "\1\222\21\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\11\7\1\u0183\4\7\1\222\22\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\6\7\1\u018d\32\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\1\124"+
    "\40\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\31\7\1\u018e\7\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\37\7\1\u018f\1\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\u0185\35\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\23\7\1\u0190"+
    "\15\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\11\7\1\u0191\27\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\6\7\1\u0192\32\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\u0193\16\7\1\u0194\21\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\17\7"+
    "\1\u0195\21\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\10\7\1\u0196\30\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\7\1\141\1\u0197\1\u0198\1\u0199"+
    "\3\7\1\u019a\1\u0199\2\7\1\315\12\7\1\u0181\1\7"+
    "\1\u0181\7\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\12\7\1\u0158\26\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\10\7\1\u019b\30\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\1\u0139\40\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\11\7\1\u019c"+
    "\5\7\1\u019d\21\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\37\7\1\316\1\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\244\1\7\1\244"+
    "\24\7\1\244\6\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\3\7\1\u019e\2\7\1\244\32\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\1\312\40\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\3\7"+
    "\1\u019f\35\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\12\7\1\312\26\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\14\7\1\244\24\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\7\7\1\u01a0\31\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\14\7"+
    "\1\u01a1\24\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\15\7\1\u0161\23\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\31\7\1\u0161\7\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\15\7\1\326\23\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\10\7"+
    "\1\274\4\7\1\274\23\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\17\7\1\u01a2\21\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\3\7\1\u01a3\1\u01a4"+
    "\1\u01a5\1\u01a6\1\u0158\3\7\1\u0158\1\u01a7\1\u0178\11\7"+
    "\1\u01a8\1\7\1\u01a9\1\u01aa\2\7\1\u01ab\3\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\10\7\1\311"+
    "\4\7\1\311\23\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\33\7\1\u01ac\5\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\14\7\1\u01ad\24\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\10\7\1\u01ae"+
    "\30\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\40\7\1\312\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\17\7\1\244\12\7\1\244\6\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\17\7\1\u01af\21\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\31\7"+
    "\1\u01b0\7\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\4\7\1\364\34\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\17\7\1\u01b1\21\7\1\0\11\7"+
    "\67\0\1\u01b2\100\0\1\u01b3\77\0\1\u01b4\73\0\1\u01b5"+
    "\100\0\1\u01b6\12\0\4\7\1\0\3\7\1\52\16\7"+
    "\1\u0169\22\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\13\7\1\u01b7\25\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\7\1\u01b8\37\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\15\7\1\u01b9\23\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\3\7"+
    "\1\u014b\35\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\1\7\1\312\37\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\7\1\141\12\7\1\315\24\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\11\7"+
    "\1\u0135\27\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\11\7\1\315\27\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\6\7\1\305\32\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\10\7\1\u01ba\30\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\33\7"+
    "\1\u01bb\5\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\14\7\1\u01bc\24\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\7\1\u01bc\37\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\1\7\1\u01bd\37\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\10\7"+
    "\1\311\30\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\17\7\1\u0182\21\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\3\7\1\244\1\7\1\244\5\7"+
    "\1\u01be\1\7\1\u015d\14\7\1\244\2\7\1\244\3\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\13\7"+
    "\1\u01bf\1\7\1\u01c0\23\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\3\7\1\244\1\7\1\244\5\7"+
    "\1\u01be\1\244\1\u015d\14\7\1\244\6\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\5\7\1\244\24\7"+
    "\1\244\6\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\13\7\1\u01c1\25\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\317\40\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\7\1\u01c2\1\u01c3\36\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\11\7"+
    "\1\244\27\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\10\7\1\u01c4\30\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\11\7\1\u0161\27\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\5\7\1\u01c5\33\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\10\7"+
    "\1\u01c6\30\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\35\7\1\u01c7\3\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\3\7\1\244\2\7\1\244\23\7"+
    "\1\244\6\7\1\0\11\7\12\0\4\7\1\0\2\7"+
    "\1\244\1\52\41\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\11\7\1\u01c8\27\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\2\244\1\7\1\141"+
    "\23\7\1\244\2\7\1\244\3\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\5\7\1\u0182\33\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\12\7\1\u01c9"+
    "\26\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\17\7\1\u01ca\21\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\1\7\1\u01cb\37\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\31\7\1\u01cc\7\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\13\7\1\u01cd"+
    "\1\7\1\u0182\23\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\6\7\1\u01ce\32\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\u0182\7\7\1\u01cf"+
    "\13\7\1\u01d0\11\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\15\7\1\311\23\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\23\7\1\u01d1\15\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\3\7\1\u0124"+
    "\26\7\1\u0124\2\7\1\u0124\3\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\11\7\1\u01d2\27\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\3\7\1\244"+
    "\1\7\2\244\6\7\1\244\14\7\1\244\2\7\1\244"+
    "\3\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\10\7\1\u01d3\4\7\1\u01d4\23\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\u01d5\2\7\1\u01d6"+
    "\6\7\1\u01d7\23\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\3\7\1\u01d8\2\7\1\u01d9\6\7\1\u01da"+
    "\17\7\1\u01d8\3\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\7\7\1\u01db\31\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\37\7\1\u01dc\1\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\1\u01dd\40\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\14\7"+
    "\1\u01de\24\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\2\7\1\u01df\11\7\1\u01df\6\7\1\u0197\15\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\16\7"+
    "\1\244\22\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\32\7\1\244\6\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\15\7\1\u01e0\23\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\3\7\1\244\2\7"+
    "\1\u01e1\3\7\1\244\4\7\1\u0185\12\7\1\244\6\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\3\7"+
    "\1\244\2\7\1\u01e1\3\7\1\244\17\7\1\244\6\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\31\7"+
    "\1\u01e2\7\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\3\7\1\u01e1\1\7\1\u01e1\1\u01e3\3\7\1\u01e1"+
    "\3\7\1\u01e1\13\7\1\u01e1\6\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\37\7\1\u01e4\1\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\31\7\1\u01e5"+
    "\7\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\6\7\1\337\32\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\3\7\1\315\35\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\11\7\1\u01e6\27\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\16\7\1\u01e7"+
    "\22\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\22\7\1\244\16\7\1\0\11\7\12\0\4\7\1\0"+
    "\2\7\1\u01e1\1\52\3\7\1\u01e1\1\7\2\u01e1\3\7"+
    "\1\u01e1\17\7\1\u01e1\4\7\1\u01e1\1\7\1\0\11\7"+
    "\12\0\4\7\1\0\2\7\1\u01e8\1\52\41\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\33\7\1\u01e9"+
    "\5\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\11\7\1\u01ea\27\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\17\7\1\u01bb\21\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\4\7\1\u01eb\34\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\7\7\1\u01ec"+
    "\31\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\3\7\1\u01ed\35\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\2\244\13\7\1\244\23\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\3\7\1\244\5\7"+
    "\1\244\3\7\1\244\23\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\2\7\1\274\36\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\7\7\1\u01ee\31\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\1\7"+
    "\1\222\37\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\10\7\1\303\30\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\3\7\1\244\1\7\1\244\16\7"+
    "\1\141\5\7\1\244\2\7\1\244\3\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\1\u01ef\40\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\6\7\1\u0139"+
    "\32\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\1\u0136\40\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\10\7\1\311\16\7\1\u01f0\5\7\1\u01f1\3\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\7\7"+
    "\1\244\3\7\1\244\25\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\3\7\1\u01f1\26\7\1\u01f1\2\7"+
    "\1\u01f1\3\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\35\7\1\u01f2\3\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\u01f3\40\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\u01f0\2\7\1\u01f4"+
    "\1\7\1\311\30\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\15\7\1\u01f5\23\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\u01f1\31\7\1\u01f1"+
    "\3\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\3\7\1\244\1\u01f6\34\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\31\7\1\u01f7\7\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\37\7\1\146\1\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\10\7"+
    "\1\u01f8\30\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\4\7\1\u01f9\34\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\10\7\1\u01fa\30\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\4\7\1\u01fb\34\7"+
    "\1\0\11\7\70\0\1\u01fc\100\0\1\u01fd\67\0\1\u01fe"+
    "\75\0\1\u01fd\103\0\1\u01ff\14\0\4\7\1\0\3\7"+
    "\1\52\16\7\1\u0200\22\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\7\7\1\333\31\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\15\7\1\u01bb\23\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\3\7"+
    "\1\244\31\7\1\244\3\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\11\7\1\u0201\27\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\36\7\1\u0202\2\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\15\7"+
    "\1\u015d\23\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\15\7\1\u0203\23\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\15\7\1\u0204\23\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\3\7\1\u0205\35\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\35\7"+
    "\1\u012b\3\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\1\u012b\40\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\1\7\1\141\1\u0197\36\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\16\7\1\u0206\22\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\16\7"+
    "\1\u0207\1\222\21\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\33\7\1\u0208\5\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\u0209\1\7\2\244"+
    "\20\7\1\u0182\2\7\1\244\6\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\6\7\1\244\23\7\1\244"+
    "\2\7\1\244\3\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\1\u020a\40\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\15\7\1\u020b\23\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\5\7\1\244\33\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\32\7"+
    "\1\325\6\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\3\7\1\141\35\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\13\7\1\u0182\3\7\1\u0182\12\7"+
    "\1\244\6\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\5\7\1\244\27\7\1\244\3\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\27\7\1\u020c\11\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\6\7"+
    "\1\u020d\6\7\1\u020d\23\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\6\7\1\u020e\6\7\1\u020e\23\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\23\7"+
    "\1\u0158\15\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\23\7\1\u020f\15\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\23\7\1\u0210\15\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\23\7\1\u0174\15\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\23\7"+
    "\1\u0211\15\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\23\7\1\u0212\15\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\11\7\1\222\27\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\1\7\1\u0213\37\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\4\7"+
    "\1\u0214\34\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\37\7\1\244\1\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\23\7\1\244\15\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\1\u0111\40\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\10\7\1\u01e1"+
    "\30\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\1\7\1\141\1\7\1\274\5\7\1\u0199\1\7\1\u0169"+
    "\1\u0215\12\7\1\u0181\11\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\10\7\1\u01e1\5\7\1\u01e1\22\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\4\7"+
    "\1\274\34\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\14\7\1\222\24\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\10\7\1\u018e\30\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\3\7\1\u0158\23\7"+
    "\1\u0158\11\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\1\u0216\40\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\12\7\1\u01bb\26\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\31\7\1\u0217\7\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\16\7\1\u0218"+
    "\22\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\3\7\1\325\35\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\7\7\1\u01bb\31\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\10\7\1\274\30\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\15\7\1\u0168"+
    "\22\7\1\u0168\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\23\7\1\141\15\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\4\7\1\244\1\7\1\141\1\7"+
    "\1\311\5\7\1\u01ba\10\7\1\146\5\7\1\244\3\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\33\7"+
    "\1\u0158\5\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\40\7\1\u0168\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\4\7\1\u0219\34\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\7\1\u0193\37\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\7\7\1\u021a"+
    "\31\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\1\7\1\u021b\37\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\13\7\1\u021c\25\7\1\0\11\7\71\0"+
    "\1\u021d\100\0\1\u01ff\67\0\1\u01b6\21\0\4\7\1\0"+
    "\3\7\1\52\17\7\1\315\21\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\u021e\35\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\2\7\1\u021f"+
    "\36\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\32\7\1\u01cd\6\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\3\7\1\u0182\26\7\1\u01cd\6\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\35\7\1\u0220"+
    "\3\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\1\u018e\22\7\1\222\15\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\u018e\40\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\u0221\23\7\1\u0221"+
    "\11\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\11\7\1\u0222\27\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\33\7\1\u01cd\5\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\2\7\1\u0223\36\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\23\7\1\123"+
    "\15\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\23\7\1\u0224\15\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\10\7\1\u0225\30\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\10\7\1\u0226\30\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\15\7\1\u0227"+
    "\23\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\15\7\1\u0228\23\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\30\7\1\u0229\10\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\17\7\1\u0213\21\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\1\7\1\244"+
    "\11\7\1\244\25\7\1\0\11\7\12\0\4\7\1\0"+
    "\2\7\1\u0218\1\52\41\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\7\1\u01bb\37\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\1\u01bb\40\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\37\7\1\u022a"+
    "\1\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\6\7\1\u022b\32\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\35\7\1\u01cd\3\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\10\7\1\u022c\30\7\1\0"+
    "\11\7\72\0\1\u01b6\15\0\4\7\1\0\3\7\1\52"+
    "\7\7\1\152\31\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\1\7\1\u022d\37\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\6\7\1\141\32\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\3\7\1\141"+
    "\1\7\1\u0182\24\7\1\325\2\7\1\u0220\3\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\27\7\1\u022e"+
    "\11\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\3\7\1\244\1\7\1\244\12\7\1\u01cd\11\7\1\244"+
    "\2\7\1\244\3\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\15\7\1\u01ba\23\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\244\11\7\1\244"+
    "\23\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\3\7\1\244\2\7\1\244\32\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\3\7\1\244\11\7\1\244"+
    "\17\7\1\244\3\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\3\7\1\244\2\7\1\244\26\7\1\244"+
    "\3\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\25\7\1\244\13\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\4\7\1\u022f\1\7\1\u0230\26\7\1\244"+
    "\3\7\1\0\11\7\12\0\4\7\1\0\3\7\1\52"+
    "\11\7\1\u0231\27\7\1\0\11\7\12\0\4\7\1\0"+
    "\3\7\1\52\10\7\1\272\30\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\14\7\1\u0232\24\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\1\u0233\13\7"+
    "\1\u0234\24\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\13\7\1\244\25\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\35\7\1\u022f\3\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\7\7\1\u0235\31\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\7\7"+
    "\1\u0236\31\7\1\0\11\7\12\0\4\7\1\0\1\244"+
    "\2\7\1\52\22\7\2\244\15\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\1\u0237\40\7\1\0\11\7"+
    "\12\0\4\7\1\0\3\7\1\52\15\7\1\u0238\23\7"+
    "\1\0\11\7\12\0\4\7\1\0\3\7\1\52\15\7"+
    "\1\u0239\23\7\1\0\11\7\12\0\4\7\1\0\3\7"+
    "\1\52\7\7\1\244\31\7\1\0\11\7\12\0\4\7"+
    "\1\0\3\7\1\52\1\u01cd\40\7\1\0\11\7\12\0"+
    "\4\7\1\0\3\7\1\52\15\7\1\u023a\23\7\1\0"+
    "\11\7\12\0\4\7\1\0\3\7\1\52\16\7\1\152"+
    "\22\7\1\0\11\7\4\0";

  private static int [] zzUnpackTrans() {
    int [] result = new int[33728];
    int offset = 0;
    offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackTrans(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      value--;
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }


  /* error codes */
  private static final int ZZ_UNKNOWN_ERROR = 0;
  private static final int ZZ_NO_MATCH = 1;
  private static final int ZZ_PUSHBACK_2BIG = 2;
  private static final char[] EMPTY_BUFFER = new char[0];
  private static final int YYEOF = -1;
  private static Reader zzReader; // Fake

  /* error messages for the codes above */
  private static final String ZZ_ERROR_MSG[] = {
    "Unkown internal scanner error",
    "Error: could not match input",
    "Error: pushback value was too large"
  };

  /**
   * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
   */
  private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();

  private static final String ZZ_ATTRIBUTE_PACKED_0 =
    "\1\0\1\11\1\1\1\11\4\1\1\11\31\1\2\11"+
    "\3\1\1\0\2\11\1\0\177\1\4\0\224\1\5\0"+
    "\152\1\5\0\105\1\3\0\1\11\35\1\1\0\35\1";

  private static int [] zzUnpackAttribute() {
    int [] result = new int[570];
    int offset = 0;
    offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackAttribute(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }

  /** the current state of the DFA */
  private int zzState;

  /** the current lexical state */
  private int zzLexicalState = YYINITIAL;

  /** this buffer contains the current text to be matched and is
      the source of the yytext() string */
  private CharSequence zzBuffer = "";

  /** this buffer may contains the current text array to be matched when it is cheap to acquire it */
  private char[] zzBufferArray;

  /** the textposition at the last accepting state */
  private int zzMarkedPos;

  /** the textposition at the last state to be included in yytext */
  private int zzPushbackPos;

  /** the current text position in the buffer */
  private int zzCurrentPos;

  /** startRead marks the beginning of the yytext() string in the buffer */
  private int zzStartRead;

  /** endRead marks the last character in the buffer, that has been read
      from input */
  private int zzEndRead;

  /**
   * zzAtBOL == true <=> the scanner is currently at the beginning of a line
   */
  private boolean zzAtBOL = true;

  /** zzAtEOF == true <=> the scanner is at the EOF */
  private boolean zzAtEOF;

  /* user code: */
  public _AsmIntelHighlightingLexer() {
    this(null);
  }


  /**
   * Creates a new scanner
   *
   * @param   in  the java.io.Reader to read input from.
   */
  public _AsmIntelHighlightingLexer(Reader in) {
    zzReader = in;
  }


  /** 
   * Unpacks the compressed character translation table.
   *
   * @param packed   the packed character translation table
   * @return         the unpacked character translation table
   */
  private static char [] zzUnpackCMap(String packed) {
    char [] map = new char[0x10000];
    int i = 0;  /* index in packed string  */
    int j = 0;  /* index in unpacked array */
    while (i < 1768) {
      int  count = packed.charAt(i++);
      char value = packed.charAt(i++);
      do map[j++] = value; while (--count > 0);
    }
    return map;
  }

  @Override
  public final int getTokenStart(){
    return zzStartRead;
  }

  @Override
  public final int getTokenEnd(){
    return getTokenStart() + yylength();
  }

  @Override
  public void reset(CharSequence buffer, int start, int end, int initialState){
    zzBuffer = buffer;
    zzBufferArray = CharArrayUtil.fromSequenceWithoutCopying(buffer);
    zzCurrentPos = zzMarkedPos = zzStartRead = start;
    zzPushbackPos = 0;
    zzAtEOF  = false;
    zzAtBOL = true;
    zzEndRead = end;
    yybegin(initialState);
  }

  /**
   * Refills the input buffer.
   *
   * @return      <code>false</code>, iff there was new input.
   *
   * @exception   IOException  if any I/O-Error occurs
   */
  private boolean zzRefill() throws IOException {
    return true;
  }


  /**
   * Returns the current lexical state.
   */
  @Override
  public final int yystate() {
    return zzLexicalState;
  }


  /**
   * Enters a new lexical state
   *
   * @param newState the new lexical state
   */
  @Override
  public final void yybegin(int newState) {
    zzLexicalState = newState;
  }


  /**
   * Returns the text matched by the current regular expression.
   */
  public final CharSequence yytext() {
    return zzBuffer.subSequence(zzStartRead, zzMarkedPos);
  }


  /**
   * Returns the character at position <tt>pos</tt> from the
   * matched text.
   *
   * It is equivalent to yytext().charAt(pos), but faster
   *
   * @param pos the position of the character to fetch.
   *            A value from 0 to yylength()-1.
   *
   * @return the character at position pos
   */
  public final char yycharat(int pos) {
    return zzBufferArray != null ? zzBufferArray[zzStartRead+pos]:zzBuffer.charAt(zzStartRead+pos);
  }


  /**
   * Returns the length of the matched text region.
   */
  public final int yylength() {
    return zzMarkedPos-zzStartRead;
  }


  /**
   * Reports an error that occured while scanning.
   *
   * In a wellformed scanner (no or only correct usage of
   * yypushback(int) and a match-all fallback rule) this method
   * will only be called with things that "Can't Possibly Happen".
   * If this method is called, something is seriously wrong
   * (e.g. a JFlex bug producing a faulty scanner etc.).
   *
   * Usual syntax/scanner level error handling should be done
   * in error fallback rules.
   *
   * @param   errorCode  the code of the errormessage to display
   */
  private void zzScanError(int errorCode) {
    String message;
    try {
      message = ZZ_ERROR_MSG[errorCode];
    }
    catch (ArrayIndexOutOfBoundsException e) {
      message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
    }

    throw new Error(message);
  }


  /**
   * Pushes the specified amount of characters back into the input stream.
   *
   * They will be read again by then next call of the scanning method
   *
   * @param number  the number of characters to be read again.
   *                This number must not be greater than yylength()!
   */
  public void yypushback(int number)  {
    if ( number > yylength() )
      zzScanError(ZZ_PUSHBACK_2BIG);

    zzMarkedPos -= number;
  }


  /**
   * Resumes scanning until the next regular expression is matched,
   * the end of input is encountered or an I/O-Error occurs.
   *
   * @return      the next token
   * @exception   IOException  if any I/O-Error occurs
   */
  @Override
  public IElementType advance() throws IOException {
    int zzInput;
    int zzAction;

    // cached fields:
    int zzCurrentPosL;
    int zzMarkedPosL;
    int zzEndReadL = zzEndRead;
    CharSequence zzBufferL = zzBuffer;
    char[] zzBufferArrayL = zzBufferArray;
    char [] zzCMapL = ZZ_CMAP;

    int [] zzTransL = ZZ_TRANS;
    int [] zzRowMapL = ZZ_ROWMAP;
    int [] zzAttrL = ZZ_ATTRIBUTE;

    while (true) {
      zzMarkedPosL = zzMarkedPos;

      zzAction = -1;

      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;

      zzState = ZZ_LEXSTATE[zzLexicalState];


      zzForAction: {
        while (true) {

          if (zzCurrentPosL < zzEndReadL)
            zzInput = zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++);
          else if (zzAtEOF) {
            zzInput = YYEOF;
            break zzForAction;
          }
          else {
            // store back cached positions
            zzCurrentPos  = zzCurrentPosL;
            zzMarkedPos   = zzMarkedPosL;
            boolean eof = zzRefill();
            // get translated positions and possibly new buffer
            zzCurrentPosL  = zzCurrentPos;
            zzMarkedPosL   = zzMarkedPos;
            zzBufferL      = zzBuffer;
            zzEndReadL     = zzEndRead;
            if (eof) {
              zzInput = YYEOF;
              break zzForAction;
            }
            else {
              zzInput = zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++);
            }
          }
          int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
          if (zzNext == -1) break zzForAction;
          zzState = zzNext;

          int zzAttributes = zzAttrL[zzState];
          if ( (zzAttributes & 1) == 1 ) {
            zzAction = zzState;
            zzMarkedPosL = zzCurrentPosL;
            if ( (zzAttributes & 8) == 8 ) break zzForAction;
          }

        }
      }

      // store back cached position
      zzMarkedPos = zzMarkedPosL;

      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
        case 17:
          return FLAG;
        case 19: break;
        case 7:
          return COMMA;
        case 20: break;
        case 5:
          return INT;
        case 21: break;
        case 8:
          return LINE_COMMENT;
        case 22: break;
        case 11:
          return REGISTER;
        case 23: break;
        case 4:
          return IDENTIFIER;
        case 24: break;
        case 10:
          return LABEL;
        case 25: break;
        case 1:
          return TokenType.BAD_CHARACTER;
        case 26: break;
        case 14:
          return HEX;
        case 27: break;
        case 18:
          return PREPROCESSOR;
        case 28: break;
        case 2:
          return TokenType.WHITE_SPACE;
        case 29: break;
        case 3:
          return OPERATOR;
        case 30: break;
        case 16:
          return DIRECTIVE;
        case 31: break;
        case 15:
          return PSEUDO_INS;
        case 32: break;
        case 9:
          return STRING;
        case 33: break;
        case 6:
          return PAREN;
        case 34: break;
        case 13:
          return INSTRUCTION;
        case 35: break;
        case 12:
          return PSEUDO_REG;
        case 36: break;
        default:
          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
            zzAtEOF = true;
            return null;
          }
          else {
            zzScanError(ZZ_NO_MATCH);
          }
      }
    }
  }


}
